"""
邢不行™️ 策略分享会
仓位管理实盘框架

版权所有 ©️ 邢不行
微信: xbx6660

本代码仅供个人学习使用，未经授权不得复制、修改或用于商业用途。

Author: 邢不行
"""
import numpy as np

"""
# 策略级别白名单
类似于我们账户级别的白名单配置。
但是和白名单不同的是，我们可以限制每一个策略下的子策略中，使用那些币种。
所以，你可以理解这个是策略级别的白名单控制。

# 参数填写规范，正常额格式都支持，且支持多个
- ✅ ('BTC', )
- ✅ ["BTC-USDT", "ETH-USDT"]
- ✅ ('BTCUSDT', )
- ❌ ["BTC/USDT", ]
- ❌ "BTC ETH"
- ❌ "BTC,ETH"
"""


def signal(*args):
    df = args[0]
    only_symbols = list(args[1])
    factor_name = args[2]

    # 回测和实盘的symbol表达不同
    symbols = []
    for symbol in only_symbols:
        symbol = symbol.replace('-USDT', 'USDT')  # 回测和实盘的symbol表达不同
        if not symbol.endswith('USDT'):
            symbol = f'{symbol}USDT'  # 如果用户只填写了BTC这样子的币对的名称
        symbols.append(symbol)

    df[factor_name] = np.where(df['symbol'].isin(symbols), np.int8(1), np.nan)

    return df
